/*
    c++多线程和简单锁
*/

#include <vector>
#include <iostream>
#include <thread>
#include <cstdlib>
//利用 API中的 Sleep函数，单位ms
#include <Windows.h>
//锁
#include <mutex>
/*普通锁加锁
    std::mutex mt;
    mt.lock();
    mt.unlock();
*/
/*类模板
    std::lock_guard
    //使用锁初始化，自动加锁，对象析构之后，自动解锁
    std::lock_guard<std::mutex> lck(mt);
*/
using std::cout;
using std::endl;
using std::vector;

static int count = 0;
//全局的锁
std::mutex mt;

void fun1()
{
    int i = 1000000;
    while (i > 0)
    {
        // mt.lock();
        std::lock_guard<std::mutex> guard(mt);
        count++;
        // mt.unlock();
        i--;
    }
    return;
}

void fun2()
{
    int i = 1000000;
    while (i > 0)
    {
        std::lock_guard<std::mutex> guard(mt);
        // mt.lock();
        count++;
        // mt.unlock();
        i--;
    }
    return;
}

int main()
{
    std::thread th1(fun1);
    std::thread th2(fun2);
    th1.join();
    th2.join();
    cout << "count=" << count << endl;
    return 0;
}